Crate keyvalues_parser[][src]

Expand description

keyvalues-parser uses pest to parse VDF text v1 and v2 files to an untyped Rust structure to ease manipulation and navigation. The parser provides an untyped Vdf representation as well as a linear TokenStream

The library is primarily used in conjunction with keyvalues-serde which provides a more ergonommic (yet more limiting) means of dealing with VDF text

Installation

Note: this requires at least Rust 1.42.0

Just add the library to your Cargo.toml

[dependencies]
keyvalues-parser = "0.1.0"

Usage

There is documentation available here and there are examples available in the examples directory

Quickstart

loginusers.vdf

"users"
{
    "12345678901234567"
    {
        "AccountName"        "ACCOUNT_NAME"
        "PersonaName"        "PERSONA_NAME"
        "RememberPassword"    "1"
        "MostRecent"        "1"
        "Timestamp"        "1234567890"
    }
}

main.rs

use keyvalues_parser::Vdf;

let vdf_text = std::fs::read_to_string("loginusers.vdf")?;
let vdf = Vdf::parse(&vdf_text)?;
assert_eq!(
    "12345678901234567",
    vdf.value.unwrap_obj().keys().next().unwrap()
);

Limitations

VDF text is drastically underspecified. This leads to the following liberties being taken

  • Not respecting the ordering of key-value pairs, where the pairs are stored in a BTreeMap that sorts the values based on the key
  • Because of limitations in representing sequences, an empty Vec of values will be rendered as a missing keyvalue pair

Benchmarks

A set of basic benchmarks can be found in the benches directory

These just test timing and throughput for both parsing and rendering of a fairly typical VDF file

Modules

All error information for parsing and rendering

Structs

A loosely typed representation of VDF text

Enums

Enum representing all valid VDF values

Type Definitions

A Key is simply an alias for Cow<str>

An Obj is represented as a BTreeMap which maps keys to their corresponding values